package com.example.artemis.config;

/**
 * 生产者配置抽象类
 * 定义生产者的基本配置参数
 */
public abstract class AbstractProducerConfig {

    /**
     * 获取连接器URL
     * @return 连接器URL
     */
    public String getConnectorUrl() {
        return "vm://0";
    }

    /**
     * 获取生产者数量
     * @return 生产者数量
     */
    public abstract int getProducerCount();

    /**
     * 获取每个生产者发送的消息数量
     * @return 每个生产者发送的消息数量
     */
    public abstract int getMessagesPerProducer();

    /**
     * 获取队列数量
     * @return 队列数量
     */
    public abstract int getQueueCount();

    /**
     * 获取队列名称前缀
     * @return 队列名称前缀
     */
    public String getQueueNamePrefix() {
        return "demo.queue";
    }

    /**
     * 获取会话模式
     * @return 会话模式
     */
    public int getSessionMode() {
        return javax.jms.Session.AUTO_ACKNOWLEDGE;
    }

    /**
     * 是否为事务会话
     * @return true表示事务会话，false表示非事务会话
     */
    public boolean isTransacted() {
        return false;
    }

    /**
     * 获取生产者名称前缀
     * @return 生产者名称前缀
     */
    public String getProducerNamePrefix() {
        return "Producer";
    }

    /**
     * 获取消息发送间隔（毫秒）
     * @return 消息发送间隔
     */
    public long getMessageIntervalMs() {
        return 100L; // 100毫秒
    }

    /**
     * 是否使用持久化消息
     * @return true表示持久化，false表示非持久化
     */
    public boolean isPersistent() {
        return true;
    }

    /**
     * 获取消息优先级
     * @return 消息优先级（0-9）
     */
    public int getMessagePriority() {
        return 4; // 默认优先级
    }

    /**
     * 获取消息存活时间（毫秒）
     * @return 消息存活时间，0表示永不过期
     */
    public long getMessageTimeToLive() {
        return 0L; // 永不过期
    }
}